package com.wang.jmonkey.modules.system.api;

import com.wang.jmonkey.common.annotation.Log;
import com.wang.jmonkey.common.result.HttpPageResult;
import com.wang.jmonkey.common.result.HttpResult;
import com.wang.jmonkey.modules.system.model.dto.SystemModuleDto;
import com.wang.jmonkey.modules.system.model.entity.SystemModuleEntity;
import com.wang.jmonkey.modules.system.model.enums.SystemResourceTypeEnum;
import com.wang.jmonkey.modules.system.model.query.SystemModuleQuery;
import com.wang.jmonkey.modules.system.service.SystemModuleService;
import com.wang.jmonkey.modules.system.service.SystemResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 系统模块配置信息表(SystemModule)表控制层
 *
 * @author HeJiawang
 * @since 2021-05-21 21:45:20
 */
@RestController
@RequestMapping("/module")
public class SystemModuleApi {

    /**
     * 服务对象
     */
    @Autowired
    private SystemModuleService service;

    @Autowired
    private SystemResourceService systemResourceService;

    /**
     * 分页查询
     * @param query 查询信息
     * @return 分页结果
     */
    @Log("系统模块管理——分页查询")
    @GetMapping("/page")
    public HttpPageResult<SystemModuleEntity> page(SystemModuleQuery query) {
        return new HttpPageResult<>(service.page(query));
    }

    /**
     * 新增系统模块信息
     * @param module 模块信息
     * @return true 新增成功
     */
    @Log("系统模块管理——新增")
    @PostMapping(value = "/save")
    public HttpResult<Void> save(@RequestBody SystemModuleEntity module) {
        return new HttpResult<Void>().setSuccess(service.save(module));
    }

    /**
     * 修改系统模块信息
     * @param module 系统模块信息
     * @return true 修改成功
     */
    @Log("系统模块管理——修改")
    @PutMapping(value = "/update")
    public HttpResult<Void> update(@RequestBody SystemModuleEntity module) {
        return new HttpResult<Void>().setSuccess(service.updateById(module));
    }

    /**
     * 删除系统模块信息
     * @param id 系统id
     * @return true 删除成功
     */
    @Log("系统模块管理——删除")
    @DeleteMapping(value = "/remove/{id}")
    public HttpResult<Void> remove(@PathVariable Long id) {
        return new HttpResult<Void>()
                .setSuccess(systemResourceService.removeByResourceId(SystemResourceTypeEnum.Module, id));
    }

    /**
     * 获取所有系统模块信息
     * @return 系统模块信息
     */
    @GetMapping("listAll")
    public HttpResult<List<SystemModuleDto>> listAll() {
        return new HttpResult<>(service.listAll());
    }

}
